import axios from '@/utils/axios'
import {AJAX_TOKEN_FAIL, TO_STANDARD_WORD_MAP} from '../config'
// import { log } from 'util';
// import {parse} from '@/utils/url'
// import {getToken, toUrl} from './sso'
// import {debounce} from '@/utils/util'

/**
 * 多次调用，在指定时间内只会执行一次
 * @type {Function}
 */
// const proxyLogout = debounce(function () {
    // toUrl(window.location.href)
// }, 3000, true)

/**
 * 把不符合前端定义的名称规范标准名称转换成标准的，
 * 需要在config.js配置 TO_STANDARD_WORD_MAP
 * @param {Object} res 需要转换的对象
 * @returns {*}
 *
 * @example
 *
 * 如： {PageSize:10, PageIndex:1} -> {limit:10, page:1}
 */
const toStandard = function (res, excluded = []) {
    if (!res) return res
    for (let key in TO_STANDARD_WORD_MAP) {
        if (TO_STANDARD_WORD_MAP.hasOwnProperty(key)) {
            const standardWord = TO_STANDARD_WORD_MAP[key]
            const isExist = typeof res[key] !== 'undefined'
            if (isExist && !excluded.includes(standardWord)) {
                res[standardWord] = res[key]
                delete res[key]
            }
        }
    }
    if (res.data) {
        res.data = toStandard(res.data, ['code', 'status'])
    }
    return res
}

/**
 * 把前端定义的标准的还原项目自己定义的
 * @param {Object} data 需要转换的对象
 * @returns {{}}
 *
 * @example
 *
 * 如：{limit:10, page:1} -> {PageSize:10, PageIndex:1}
 */
// const fixStandard = function (data) {
//     let fixData = Object.assign({}, data)
//     for (let key in STANDARD_WORD_MAP) {
//         if (STANDARD_WORD_MAP.hasOwnProperty(key)) {
//             const fixWord = STANDARD_WORD_MAP[key]
//             const isExist = typeof fixData[key] !== 'undefined'
//             if (isExist) {
//                 fixData[fixWord] = fixData[key]
//                 delete fixData[key]
//             }
//         }
//     }
//     return fixData
// }

/**
 * 在请求发送数据之前，对发送数据进行转换
 * @example
 *
 *  { keyword: 123 }  --> { id:'服务名称别名', token:'xxx', data: { token:'xxx', keyword: 123 } }
 */
axios.interceptors.request.use(function (config) {
    // 只对服务总线的请求进行处理
    // if (config.url.includes(API_PATH)) {
    //     config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
    //     const query = parse(config.url)
    //     const id = query.id
    //     const data = config.data || {}
    //     // data.token = getToken()
    //     const fixData = fixStandard(data)
    //     fixData.code = fixData.status
    //     let params = new URLSearchParams()
    //     params.append('id', id)
    //     // params.append('token', data.token)
    //     params.append('data', JSON.stringify(fixData))
    //     config.data = params
    // }
    return config
})

/**
 * 在ajax接受响应数组之前，进行判断是否响应未登录，如果未登录重定向到登录页面
 */
axios.interceptors.response.use(function (res) {
    console.log(res);
    // 检测接口响应数据，如果是未登录，重定向到登录页面
    const data = res.data || {}
    // 把接口响应的status转换成code
    data.code = typeof data.code !== 'undefined' ? data.code : (data.status || data.Status)
    // token失效后，重定向到登录页
    if (data.code === AJAX_TOKEN_FAIL) {
        // proxyLogout()
    }
    res.data.data = toStandard(data.data || data.Data || null)
    return res
})
